#pragma once
#include "BaseVector.h"
class Vector2;
class Vector3 :public BaseVector
{
public:
	Vector3();
	Vector3(double x, double y, double z, double w = 1);
	Vector3(const Vector3& v);
	Vector3(const Vector2& v);
	Vector3(const BaseVector& v);
	~Vector3();

	void Set(double x, double y, double z, double w = 1);
	void SetX(double x);
	void SetY(double y);
	void SetZ(double z);
	void SetW(double w);
	double GetX() const;
	double GetY() const;
	double GetZ() const;
	double GetW() const;

	Vector3& operator=(const Vector2& v);
	Vector3& operator=(const Vector3& v);
	Vector3& operator=(const BaseVector& v);

	static Vector3 FromMatrix(Matrix mat);
	static void SetUpOrthogonalBasisByW(Vector3 &u, Vector3 &v, Vector3 &w);
};

